/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.*;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 *
 * @author thiago
 */
@Entity
@Table(name="Pedido")
public class Pedido implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long idPedido;
    private long numeroPedido;
    @OneToOne(fetch = FetchType.EAGER)
    private Cotacao cotacao;
    private Double valorTotal;
    @ManyToOne
    private Usuario aprovadoPor;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataAprovacao;
    private String horaAprovacao;
    @ManyToOne
    private Usuario baixadoPor;
    private Status status;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataPedido;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataEntrega;
    @ManyToMany(fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<ItemCotacao> itemCotacao;  
    @ManyToOne(fetch = FetchType.EAGER)
    private SolicitacaoCotacao solicitacao;
    @ManyToOne(fetch = FetchType.EAGER)
    private Fornecedor fornecedor;
    private String justificativa;
    
    public Pedido(){
    	
    }
    
    public Pedido(
    		long numeroPedido,
    		Cotacao cotacao,
    		Double valorTotal,
    		Usuario aprovadoPor,
    		Date dataAprovacao,
    		String horaAprovacao,
    		Usuario baixadoPor,
    		Status status,
    		Date dataPedido,
    		Date dataEntrega,
    		List<ItemCotacao> itemCotacao,
    		SolicitacaoCotacao solicitacao,
    		String justificativa){
    	
    	
    	this.numeroPedido = numeroPedido;
    	this.cotacao = cotacao;
    	this.valorTotal = valorTotal;
    	this.aprovadoPor = aprovadoPor;
    	this.dataAprovacao = dataAprovacao;
    	this.horaAprovacao = horaAprovacao;
    	this.baixadoPor = baixadoPor;
    	this.status = status;
    	this.itemCotacao = itemCotacao;
    	this.solicitacao = solicitacao;
    	this.justificativa = justificativa;
    }
    
    public Long getIdPedido() {
		return idPedido;
	}

	public void setIdPedido(Long idPedido) {
		this.idPedido = idPedido;
	}

	public long getNumeroPedido() {
		return numeroPedido;
	}

	public void setNumeroPedido(long numeroPedido) {
		this.numeroPedido = numeroPedido;
	}

	public Cotacao getCotacao() {
		return cotacao;
	}

	public void setCotacao(Cotacao cotacao) {
		this.cotacao = cotacao;
	}

	public Double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}

	public Usuario getAprovadoPor() {
		return aprovadoPor;
	}

	public void setAprovadoPor(Usuario aprovadoPor) {
		this.aprovadoPor = aprovadoPor;
	}

	public Date getDataAprovacao() {
		return dataAprovacao;
	}

	public void setDataAprovacao(Date dataAprovacao) {
		this.dataAprovacao = dataAprovacao;
	}

	public Usuario getBaixadoPor() {
		return baixadoPor;
	}

	public void setBaixadoPor(Usuario baixadoPor) {
		this.baixadoPor = baixadoPor;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}	

	public String getHoraAprovacao() {
		return horaAprovacao;
	}

	public void setHoraAprovacao(String horaAprovacao) {
		this.horaAprovacao = horaAprovacao;
	}

	public Date getDataPedido() {
		return dataPedido;
	}

	public void setDataPedido(Date dataPedido) {
		this.dataPedido = dataPedido;
	}

	public Date getDataEntrega() {
		return dataEntrega;
	}

	public void setDataEntrega(Date dataEntrega) {
		this.dataEntrega = dataEntrega;
	}
	
	public List<ItemCotacao> getItemCotacao() {
		return itemCotacao;
	}

	public void setItemCotacao(List<ItemCotacao> itemCotacao) {
		this.itemCotacao = itemCotacao;
	}

	public SolicitacaoCotacao getSolicitacao() {
		return solicitacao;
	}

	public void setSolicitacao(SolicitacaoCotacao solicitacao) {
		this.solicitacao = solicitacao;
	}
	

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public String getJustificativa() {
		return justificativa;
	}

	public void setJustificativa(String justificativa) {
		this.justificativa = justificativa;
	}

	@Override
    public int hashCode() {
        int hash = 0;
        hash += (idPedido != null ? idPedido.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Pedido)) {
            return false;
        }
        Pedido other = (Pedido) object;
        if ((this.idPedido == null && other.idPedido != null) || (this.idPedido != null && !this.idPedido.equals(other.idPedido))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidades.Pedido[ id=" + idPedido + " ]";
    }
    
}
